<?php
	class validate {
		public function validateEmail($email) {
			$pattern = "/^[a-z0-9\å\ä\ö._-]+@[a-z0-9\å\ä\ö.-]+\.[a-z]{2,6}$/i";
			if(preg_match($pattern, $email)) {
 				return true;
 			}
 			return false;
		}

		// Validering av Personnummer på formaten XXXXXX-XXXX, XXXXXXXXXX, XXXXXXXX-XXXX och XXXXXXXXXXXX
		// Glöm inte luhn-algoritmen
		// Om personnummer följer giltigt format bör ett standardformat returneras annars fel, false, exception eller liknande
		public function validateSocialSecurityNumber($socialSecurityNumber) {

			if (preg_match("/^[0-9]{6}-[0-9]{4}$/", $socialSecurityNumber) || preg_match("/^[0-9]{10}$/", $socialSecurityNumber) || preg_match("/^[0-9]{8}-[0-9]{4}$/", $socialSecurityNumber) || preg_match("/^[0-9]{12}$/", $socialSecurityNumber)) {

				$socialSecurityNumber = str_replace('-', '', $socialSecurityNumber);

				//Om fler än 10 siffror, plocka ur de 10 sista
				if (strlen($socialSecurityNumber) > 10) {
					$socialSecurityNumber = substr($socialSecurityNumber, -10);
				}

				//Luhn
				$sum = 0;
		
				for ($i = 0; $i < strlen($socialSecurityNumber)-1; $i++) {
				    $tmp = substr($socialSecurityNumber, $i, 1) * (2 - ($i & 1)); //växla mellan 212121212
				    if ($tmp > 9) $tmp -= 9;
				    $sum += $tmp;
				}
		
				//Extrahera en-talet
				$sum = (10 - ($sum % 10)) % 10;
				
				//Om sista siffran matchar
				if((substr($socialSecurityNumber, -1, 1) == $sum)) {
					return $socialSecurityNumber;
				} 

				return false;				
			} 

			return false;
		}

		// Validering av datum på formaten
		// 1999-10-01
		// 99-10-01
		// 991001
		// Om datumet följer giltigt format bör ett standardformat returneras annars fel, false, exception eller liknande
		public function validateDate($date) {
			if (preg_match("/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/", $date) || preg_match("/^[0-9]{2}-[0-9]{2}-[0-9]{2}$/", $date) || preg_match("/^[0-9]{6}$/", $date)) {
				$date = str_replace('-', '', $date);
				if (strlen($date) > 6) {
					$date = substr($date, -6);
				}
				return $date;
			}
			return false;
		}

		// Filtrerad textsträng för:
		// Sträng med tillåten visning av viss HTML kod men ej javascript
		// Sträng utan visning av HTML och javascript
		public function validateString($html, $string) {
			if($html == false) {
				$string = strip_tags($string, '');
				return $string;
			} else {
				$string = strip_tags($string, '<a><b><i><u><img><strong><em><blockquote><acronym><cite>');
				return $string;
			}
		}

		public function validatePassword($password) {

			if(preg_match("/^[a-z0-9._-]{6,32}$/i", $password)) {
				return true;
			}
			return false;

		}

		public function validateNumber($number) {
			if (is_numeric($number)) {
				return true;
			}
			return false;
		}

		//Test
		function test() {
			if (!$this->validateEmail("daniel@student.lnu.se")) {
				echo('Fail email<br/>');
			}
			if (!$this->validateSocialSecurityNumber('870822-4616')) {
				echo('Fail SSN 870822-4616<br/>');
			}
			if (!$this->validateSocialSecurityNumber('8708224616')) {
				echo('Fail SSN 8708224616<br/>');
			}
			if (!$this->validateSocialSecurityNumber('198708224616')) {
				echo('Fail SSN 198708224616<br/>');
			}
			if (!$this->validateDate('1999-10-01')) {
				echo("Fail date 1999-10-01<br/>");
			}
			if (!$this->validateDate('99-10-01')) {
				echo("Fail date 99-10-01<br/>");
			}
			if (!$this->validateDate('991001')) {
				echo("Fail date 991001<br/>");
			}
			if ($this->validateDate('91001')) {
				echo("Fail date 91001<br/>");
			}
			if (!$this->validateNumber('111')) {
				echo("Fail date 111<br/>");
			}
			if ($this->validateNumber('aaaa')) {
				echo("Fail date aaaa<br/>");
			}
			if (!$this->validatePassword('!@#1zA')) {
				echo("Fail Password test <br/>");
			}
			echo($this->validateString(false,'<b>test b-tag, html = false</b>').'<br/>');
			echo($this->validateString(true,'<b>test b-tag, html = true</b>').'<br/>');
			echo($this->validateString(true,'<script>test script-tag, html = true</script>').'<br/>');
		}
	}